package controller

import (
	"VideoManageSystem/internal/service"
	"VideoManageSystem/pkg/utils"
	"errors"

	"github.com/gin-gonic/gin"
	"gorm.io/gorm"
)

// GetUserById 查询单个用户
func GetUserById(c *gin.Context) {
	// 从 URL 路径中获取 id 参数
	userID := c.Query("id")

	// 验证 ID 是否为空
	if userID == "" {
		c.JSON(403, gin.H{
			"code":    1,
			"message": "用户 ID 不能为空",
		})
		return
	}

	// 在数据库中查找
	user, err := service.GetUserByIdFromSQL(userID)
	if err != nil {
		if errors.Is(err, gorm.ErrRecordNotFound) {
			c.JSON(403, gin.H{
				"code":    2,
				"message": "该账号不存在；错误：" + err.Error(),
			})
		} else {
			c.JSON(500, gin.H{
				"code":    500,
				"message": "服务器内部错误，无法查询相关账号，请稍后再试；错误：" + err.Error(),
			})
		}
		return
	}

	// 返回成功响应
	c.JSON(200, gin.H{
		"code":    200,
		"message": "查询成功",
		"data":    utils.SanitizeUser(user),
	})
}

// GetUserList 查询多个用户
func GetUserList(c *gin.Context) {
	var userInput struct {
		Sift   []string `json:"sift"`   // 男/女/部门
		Sort   string   `json:"sort"`   // 按照时间升序/降序
		Search string   `json:"search"` // 姓名/某个字
		Page   int      `json:"page"`   // 第几页
	}

	if err := c.ShouldBindJSON(&userInput); err != nil {
		c.JSON(400, gin.H{
			"code":    400,
			"message": "请求参数错误；错误：" + err.Error(),
		})
	}

	// 获取查询到的用户列表
	result, err := service.GetUserListFromSQL(userInput)
	if err != nil {
		c.JSON(500, gin.H{
			"code":    500,
			"message": "服务器内部错误，无法查询相关账号，请稍后再试；错误：" + err.Error(),
		})
		return
	}

	c.JSON(200, gin.H{
		"code":       200,
		"message":    "查询成功",
		"data":       result.Users,      // 直接将用户列表作为 data 字段返回
		"totalCount": result.TotalCount, // 数据库中所有符合查询条件的数据量
	})
}
